package com.gopay.common.user.dao;

import java.io.Serializable;
import java.util.List;

import com.gopay.common.base.dao.BaseDAO;
import com.gopay.common.domain.cust.CustPersonInfo;

/**
 * CustPersonInfoQuery DAO接口
 * 
 * @CustPersonInfoQueryDAO.java
 * @author liuxin
 * @2013-1-5 上午9:41:01 www.gopay.com.cn Inc.All rights reserved.
 */
public interface CustPersonInfoQueryDAO extends BaseDAO<CustPersonInfo, Serializable> {

    /**
     * 未注册认证的是手机号数量
     * @param mobileNo
     * @return
     */
    public int findMobileNo(String mobileNo);
    
    
    /**
     * 根据手机号获取个人信息
     * @param mobileNo
     * @return
     */
    public CustPersonInfo findByMobileNo(String mobileNo);
    
    /**
     * 检查证件号码是否存在
     * @param certType
     * @param certNo
     * @return
     */
    public int findByCertTypeAndCertNo(String certType,String certNo);
    
    /**
     * 检查证件号码是否已被实名认证过
     * @param certType
     * @param certNo
     * @return
     */
    public boolean checkCertRealNamed(String certType,String certNo);
    
    
    /**
     * 根据email获取个人信息
     * @param email
     * @return
     */
    public CustPersonInfo findByEmail(String email);
    
    /**
     * 获取已开通的用户
     * @param email
     * @return
     */
    public List<CustPersonInfo> findCustPersonOpen(String email);

    /**
     * 根据手机号且只根据手机号获取个人信息
     * @param mobile
     * @return
     */
    public CustPersonInfo findByCustMob(String mobile);

    public CustPersonInfo getNoActiveCustByCustMob(String mobileNo);
    public CustPersonInfo getNoActiveCustByCustEmail(String email);


	public CustPersonInfo getByCustId(String custId);


	public CustPersonInfo findByMobile(String mobileNo);
	public CustPersonInfo findByCustMobmobile(String mobile) ;
	public CustPersonInfo findByCustMobAndRealNameCertify(String mobile, String isRealNameCertify);
	public CustPersonInfo findByCustMobmobileAllStatus(String mobile);
	
	/**
     * 根据证件号获取个人信息
     * @param custName
     * @param certType
     * @param certNo
     * @return
     */
	public List<CustPersonInfo> findByCertNo(String custName, String certType, String certNo);

	 /**
	  * 根据身份证号码查询客户记录数,根据实名状态查询，不包括未实名未认证的状态
	  */
	public List<CustPersonInfo> findByCustListBycertNo(String certType,String certNo,String isRealNameCertify); 

	/**
	 * 获取已实名已认证的  个人客户数量
	 * @return
	 */
	public int getCertificatedCustCounts();
	
	/**
	 * 分页查询已实名已认证客户
	 * @param pageIndex    
	 * @param pageSize
	 * @return
	 */
	public List<CustPersonInfo> findCertifiedCustsByPage(int pageIndex, int pageSize);
	
	/**
	 * 获取已实名已认证 但是未认证指定渠道的客户数量 
	 * @param notCertChannel   渠道码
	 * @return
	 */
	public int getCertCustCountsByChannel(String notCertChannel);
	
	/**
	 * 分页获取已实名已认证 但是未认证指定渠道的客户
	 * @param pageIndex
	 * @param pageSize
	 * @param notCertChannel 渠道码
	 * @return
	 */
	public List<CustPersonInfo> findCertCustsByPageAndChannel(int pageIndex, int pageSize,String notCertChannel);


	/**
     * 根据用户名，身份证类型，身份证号，实名认证状态查询个人信息
     * @param custName
     * @param certType
     * @param certNo
     * @param isRealNameCertifyList
     * @return 
     * @author hougn
     */
    List<CustPersonInfo> findByCNameAndCTypeAndCNoAndRNameIn(String custName, String certType, String certNo,
            List<String> isRealNameCertifyList);

		/**
	 * @param email
	 * @return
	 * @Desc 根据邮箱、用户名、证件类型查询个人信息
	 * @Date 2016/11/30 11:16 by xuexj
	 */
	CustPersonInfo findByEmail(String email,String custName,String certType);

	/**
	 * @param mobile
	 * @return
	 * @Desc 根据手机号、用户名、证件类型查询个人信息
	 * @Date 2016/11/30 11:27 by xuexj
	 */
	CustPersonInfo findByCustMob(String mobile,String custName,String certType);

	List<CustPersonInfo> getByMobileWithoutStat(String mobile);

	List<CustPersonInfo> findCustByCertNoWithoutCancelStat(String certType,String certNo);

	/**
	 * 根据合作方信息查询开户信息
	 * @param certNo
	 * @param name
	 * @param partnerCustId
	 * @return
	 */
	public List<CustPersonInfo> findByCustListByPartnerId(String certNo, String name, String partnerCustId);

	/**
	 * 新账户体系 根据商户平台ID 和 商户客户ID查询
	 * @param certNo
	 * @param name
	 * @param partnerCustId
	 * @return
	 */
	List<CustPersonInfo> findByMerCustId(String merId, String MerCustId);
}
